/**
 *第三方登录
 */
 import {mapActions} from 'vuex'
 import {postAction} from '@api/manage'
 import {timeFix} from '@/utils/util'
 
 export const JeecgThirdLoginMixin = {
   data() {
     return {
       //第三方登录相关信息
       thirdLoginInfo: '',
       thirdPasswordShow: false,
       thirdLoginPassword: '',
       thirdLoginUser: '',
       thirdConfirmShow: false,
       thirdCreateUserLoding: false,
       thirdLoginState: false,
       //绑定手机号弹窗
       bindingPhoneModal: false,
       thirdPhone: '',
       thirdCaptcha: '',
       //获取验证码按钮30s之内是否可点击
       thirdState: {
         time: 30,
         smsSendBtn: false
       },
       //第三方用户UUID
       thirdUserUuid: '',
       thirdType: '',
       url: {
         bindingThirdPhone: '/api/erpmng/sys/thirdLogin/bindingThirdPhone'
       }
     }
   },
   created() {
   },
   methods: {
     ...mapActions(['ThirdLogin']),
     //第三方登录
     onThirdLogin(source) {
       let url = window._CONFIG['domianURL'] + `/api/erpmng/sys/thirdLogin/render/${source}`
       window.open(url, `login ${source}`, 'height=500, width=500, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no')
       let that = this
       that.thirdType = source
       that.thirdLoginInfo = ''
       that.thirdLoginState = false
       let receiveMessage = function(event) {
         let token = event.data
         if (typeof token === 'string') {
           //如果是字符串类型 说明是token信息
           if (token === '登录失败') {
             that.$message.warning(token)
           } else if (token.includes('绑定手机号')) {
             that.bindingPhoneModal = true
             let strings = token.split(',')
             that.thirdUserUuid = strings[1]
           } else {
             that.doThirdLogin(token)
           }
         } else if (typeof token === 'object') {
           //对象类型 说明需要提示是否绑定现有账号
           if (token['isObj'] === true) {
             that.thirdConfirmShow = true
             that.thirdLoginInfo = { ...token }
           }
         } else {
           that.$message.warning('不识别的信息传递')
         }
       }
       window.addEventListener('message', receiveMessage, false)
     },
     // 根据token执行登录
     doThirdLogin(token) {
       if (this.thirdLoginState === false) {
         this.thirdLoginState = true
         let param={};
         param.thirdType=this.thirdType
         param.token=token
         this.ThirdLogin(param).then(res => {
           if (res.success) {
             this.loginSuccess()
           } else {
             this.requestFailed(res)
           }
         })
       }
     },
     // 绑定已有账号 需要输入密码
     thirdLoginUserBind() {
       this.thirdLoginPassword = ''
       this.thirdLoginUser = this.thirdLoginInfo.uuid
       this.thirdConfirmShow = false
       this.thirdPasswordShow = true
     },
     //创建新账号
     thirdLoginUserCreate() {
       this.thirdCreateUserLoding = true
       // 账号名后面添加两位随机数
       this.thirdLoginInfo['suffix'] = parseInt(Math.random() * 98 + 1)
       //this.thirdLoginInfo.operateCode = 123 //测试校验失败
       postAction('/api/erpmng/sys/third/user/create', this.thirdLoginInfo).then(res => {
         if (res.success) {
           let token = res.result
           this.doThirdLogin(token)
           this.thirdConfirmShow = false
         } else {
           this.$message.warning(res.message)
         }
       }).finally(() => {
         this.thirdCreateUserLoding = false
       })
     },
     // 核实密码
     thirdLoginCheckPassword() {
       //this.thirdLoginInfo.operateCode = 123 //测试校验失败
       let param = Object.assign({}, this.thirdLoginInfo, { password: this.thirdLoginPassword })
       postAction('/api/erpmng/sys/third/user/checkPassword', param).then(res => {
         if (res.success) {
           this.thirdLoginNoPassword()
           this.doThirdLogin(res.result)
         } else {
           this.$message.warning(res.message)
         }
       })
     },
     // 没有密码 取消操作
     thirdLoginNoPassword() {
       this.thirdPasswordShow = false
       this.thirdLoginPassword = ''
       this.thirdLoginUser = ''
     },
     //获取第三方验证码
     getThirdCaptcha() {
       let that = this
       if (!this.thirdPhone) {
         that.cmsFailed('请输入手机号')
       } else {
         this.thirdState.smsSendBtn = true
         let interval = window.setInterval(() => {
           if (that.thirdState.time-- <= 0) {
             that.thirdState.time = 30
             that.thirdState.smsSendBtn = false
             window.clearInterval(interval)
           }
         }, 1000)
         const hide = this.$message.loading('验证码发送中..', 0)
         let smsParams = {}
         smsParams.mobile = this.thirdPhone
         smsParams.smsmode = '1'
         postAction('/api/erpmng/sys/sms', smsParams).then(res => {
           if (!res.success) {
             setTimeout(hide, 0)
             this.cmsFailed(res.message)
           }
           setTimeout(hide, 500)
         }).catch(err => {
           setTimeout(hide, 1)
           clearInterval(interval)
           that.thirdState.time = 30
           that.thirdState.smsSendBtn = false
           this.requestFailed(err)
         })
       }
     },
     //绑定手机号点击确定按钮
     thirdHandleOk() {
       let bingingParams = {}
       bingingParams.mobile = this.thirdPhone
       bingingParams.captcha = this.thirdCaptcha
       bingingParams.thirdUserUuid = this.thirdUserUuid
       postAction(this.url.bindingThirdPhone, bingingParams).then(res => {
         if (res.success) {
           this.bindingPhoneModal = false
           this.doThirdLogin(res.result)
         } else {
           this.$message.$warning(res.message)
         }
       })
     },
     loginSuccess () {
       // update-begin- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮，防止多次点击
       // this.loginBtn = false
       // update-end- author:sunjianlei --- date:20190812 --- for: 登录成功后不解除禁用按钮，防止多次点击
       this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
         console.log('登录跳转首页出错,这个错误从哪里来的')
       })
       this.$notification.success({
         message: '欢迎',
         description: `${timeFix()}，欢迎回来`,
       });
     },
     cmsFailed(err){
       this.$notification[ 'error' ]({
         message: "登录失败",
         description:err,
         duration: 4,
       });
     },
     requestFailed (err) {
       this.$notification[ 'error' ]({
         message: '登录失败',
         description: ((err.response || {}).data || {}).message || err.message || "请求出现错误，请稍后再试",
         duration: 4,
       });
       this.loginBtn = false;
     },
   }
 
 }